<?php
/**
* 名称：登录页面控制器。
* 描述：封装“用户登录概念”的程序逻辑，统一进行相关程序的操作。
*/
final class Controller_Login extends Controller{
    /**
    * 描述：访问时验证用户cookie信息，确认身份信息后继续确认身份类型，并转向相应系统。
    * @return void
    */
    protected function Acquiescent(){
        if(Model_Account::IsLogin()===TRUE){
            $url=$this->GetURL();
            if($url){
                header('location:'.$url);
            }
            else{
                $this->DisplayPage();
            }
        }
        else{
            $this->DisplayPage();
        }
    }

    /**
    * 描述：输出验证码。
    */
    protected function Captcha(){
        $captcha=new Captcha();
        $captcha->doimg();
        $captcha->setSession();
    }

    /**
    * 描述：显示登录页面。
    */
    protected function DisplayPage(){
        $systemData=array(
            Model_License::$SYSTEM1,
            Model_License::$SYSTEM2
        );
        Template::Assign('A',array('id'=>'login'));
        Template::Assign('systemData',$systemData);
        Template::Display('login.html');
    }

    /**
    * 描述：根据用户提交的用户信息的结果返回信息,供AJAX脚本调用。
    * @return void
    */
    protected function Logging(){
        #获取表单信息。
        list($result,$username,$password,$system,$captcha,$isRemember)=array(NULL,NULL,NULL,NULL,NULL,NULL);
        if(isset($_POST['username'])){
            $username=trim($_POST['username']);
        }
        if(isset($_POST['password'])){
            $password=Model_Account::Hash($_POST['password']);
        }
        if(isset($_POST['system'])){
            $system=$_POST['system'];
        }
        if(isset($_POST['captcha'])){
            $captcha=trim($_POST['captcha']);
        }
        if(isset($_POST['remember'])){
            $isRemember=$_POST['remember'];
        }
        #验证码验证。
        if($captcha!==Captcha::GetSessionValue()){
            $result=array(
                'error'=>'1','message'=>'您输入的验证码不正确，请重新输入。'
            );
        }
        #进行身份验证。
        if(Model_Account::IsRightUser($username,$password)){
            $url=$this->GetURL($system);
            if($url){
                if(Model_Account::Login($username,$password,$system,$isRemember)){
                    Captcha::DeleteSession(); //释放验证码session。
                    $result=array(
                        'error'=>'0','message'=>$url
                    );
                }
                else{
                    $result=array(
                        'error'=>'4','message'=>'程序错误，登录失败。'
                    );
                }
            }
            else{
                $result=array(
                    'error'=>'3','message'=>'授权错误，登录失败。'
                );
            }
        }
        else{
            $result=array(
                'error'=>'2','message'=>'您输入的帐号或密码不正确，请重新输入。'
            );
        }
        echo json_encode($result);
    }

    /**
    * 描述：登录程序，在超时登录时调用。
    * @return void
    */
    protected function LoggingTimeout(){
        $status=$this->Logging();
        if($status['error']=='0'){
            echo json_encode(array(
                'statusCode'=>'200',
                'message'=>'',
                'navTabId'=>'',
                'callbackType'=>'closeCurrent',
                'forwardUrl'=>''
            ));
        }
        else{
            echo json_encode(array(
                'statusCode'=>'300',
                'message'=>$status['message'],
                'navTabId'=>'',
                'callbackType'=>'',
                'forwardUrl'=>''
            ));
        }
    }

    protected function Logout(){
        Model_Account::Logout();
        $this->DisplayPage();
    }
    protected function TimeoutView(){
        Template::Display('login_timeout.html');
    }

    /**
    * 描述：根据用户证书转向系统主面板。
    * @return void
    */
   protected function GetURL($system=NULL){
        #在没有给出登录系统标识的情况下，取当前用户登录时存记下的标识，用于当用户己经登录时访问该页面的情况。
        if(is_null($system)){
            $systemCookie=$_COOKIE[Model_Account::COOKIE_SYSTEM];
            if(isset($systemCookie)){
                $system=$systemCookie;
            }
            else{
                return NULL;
            }
        }
        #根据授权转到相应系统。
        switch($system){
            case Model_License::$SYSTEM0['Value']:
                return Route::GenerateURI(array(
                    Route::INDEX_NAME_CONTROLLER=>'system0_index'
                ));
            break;
            case Model_License::$SYSTEM1['Value']:
                return Route::GenerateURI(array(
                    Route::INDEX_NAME_CONTROLLER=>'system1_index'
                ));
            break;
            case Model_License::$SYSTEM2['Value']:
                return Route::GenerateURI(array(
                    Route::INDEX_NAME_CONTROLLER=>'system2_index'
                ));
            break;
            default:
                return NULL;
        }
    }
}
?>